/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ufps.cuatro.util.wizard;

import java.util.MissingResourceException;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ufps.cuatro.modelo.asistente.clase.JPanelWizardClaseWelcomeDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.constructor.JPanelWizardClaseComplejaParametrosConstructorFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.constructor.JPanelWizardClaseComplejaSelectConstructorDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.entrada.JPanelWizardClaseComplejaEntradaCustomPropertiesFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.entrada.JPanelWizardClaseComplejaSeleccionPropiedadesEntradaDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.salida.JPanelWizardClaseComplejaSalidaCustomPropertiesFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.compleja.salida.JPanelWizardClaseComplejaSeleccionPropiedadesSalidaDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.simple.JPanelWizardClaseSimpleFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.clase.vinculadora.JPanelWizardClaseVinculadoraFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.espejo.complejo.wizard.JPanelWizardEspejoStandardSelectConfigFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.espejo.complejo.wizard.JPanelWizardEspejoStandardSelectElementsDescriptor;
import com.ufps.cuatro.modelo.asistente.espejo.simple.wizard.JPanelWizardEspejoSimpleSelectElementsDescriptor;
import com.ufps.cuatro.modelo.asistente.libre.wizard.JPanelWizardLibreSelectConfigFinishDescriptor;
import com.ufps.cuatro.modelo.asistente.libre.wizard.JPanelWizardLibreSelectElementsDescriptor;
import com.ufps.cuatro.modelo.representacion.ObjetoTipoDatoReflexion;
import com.ufps.cuatro.modelo.representacion.wizard.clase.JPanelWizardSelectClassDescriptor;
import com.ufps.cuatro.modelo.representacion.wizard.clase.JPanelWizardSelectModeRepresentacionDescriptor;
import com.ufps.cuatro.modelo.representacion.wizard.clase.JPanelWizardSelectOrderRepresentacionDescriptor;
import com.ufps.cuatro.modelo.representacion.wizard.clase.JPanelWizardSelectPropiertiesDescriptor;

/**
 *
 * @author Carlos A. Torres C. 
 */
public abstract class UtilWizard {
    
    public final static int WIZARD_ASISTENTE_ESPEJO_SIMPLE = 4;
    public final static int WIZARD_ASISTENTE_ESPEJO_STANDARD = 0;
    public final static int WIZARD_ASISTENTE_LIBRE = 1;
    public final static int WIZARD_CLASS_REPRESENTACION = 2;
    public final static int WIZARD_CLASS_ASISTENTE = 3;
    public final static int WIZARD_CLASS = 5;
    public final static int WIZARD_CLASS_CONSTRUCTOR = 6;
    public final static int WIZARD_CLASS_ENTRADA = 7;
    public final static int WIZARD_CLASS_SIMPLE = 3;
    public final static int WIZARD_GENERADOR_VINCULADOR = 8;
    public static PropertyResourceBundle resources;
    public static Wizard objWizard = null;
    public static int modeWizard;
    
    public static ObjectTempSwapWizard objTempSwap = null;
    
    static {

        try { 
            
            resources = (PropertyResourceBundle)
                    ResourceBundle.getBundle("com.ufps.cuatro.util.wizard.UtilWizard");            
        
        } catch (MissingResourceException ex) {            
            Logger.getLogger(UtilWizard.class.getName()).log(Level.SEVERE, null, ex);            
        }
    }
    
    public static int runWizard(int modeWizard){       
        objWizard = null;
        UtilWizard.modeWizard = modeWizard;
        switch(modeWizard){
            case WIZARD_ASISTENTE_ESPEJO_SIMPLE:
                objWizard = configWizardAsistenteEspejoSimple();
                break;
            case WIZARD_ASISTENTE_ESPEJO_STANDARD:
                objWizard = configWizardAsistenteEspejoStandard();
                break;
            case WIZARD_ASISTENTE_LIBRE:
                objWizard = configWizardAsistenteLibre();
                break;
            case WIZARD_CLASS_REPRESENTACION:
                objWizard = configWizardClassRepresentacion();
                break;
            case WIZARD_CLASS_ASISTENTE:
                objWizard = configWizardAsistenteEspejoStandard();
                break;            
        }     
        if(objWizard != null){
            int ret = objWizard.showModalDialog();
            System.out.println("Dialog return code is (0=Finish,1=Cancel,2=Error): " + ret);
            return ret;
        }   
        return 2;
    }
    
    public static int runWizard(int modeWizard, Object obj){       
        objWizard = null;
        UtilWizard.modeWizard = modeWizard;
        switch(modeWizard){            
            case WIZARD_CLASS:
                objWizard = configWizardClass((ObjetoTipoDatoReflexion) obj);
                break;
            case WIZARD_CLASS_SIMPLE:
                objWizard = configWizardClassSimple((ObjetoTipoDatoReflexion) obj);
                break;
            case WIZARD_GENERADOR_VINCULADOR:
                objWizard = configWizardClassVinculadora((ObjetoTipoDatoReflexion) obj);
                break;
            case WIZARD_CLASS_CONSTRUCTOR:
                objWizard = configWizardClassConstructor((ObjetoTipoDatoReflexion) obj);
                break;
        }     
        if(objWizard != null){
            int ret = objWizard.showModalDialog();
            System.out.println("Dialog return code is (0=Finish,1=Cancel,2=Error): " + ret);
            return ret;
        }   
        return 2;
    }
    
    private static Wizard configWizardAsistenteEspejoSimple(){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_ASISTENTE_ESPEJO_SIMPLE + "].name"));                                       
        //panel seleccion de elementos
        WizardPanelDescriptor descriptor2 = new JPanelWizardEspejoSimpleSelectElementsDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardEspejoSimpleSelectElementsDescriptor.IDENTIFIER, descriptor2);                       
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardEspejoSimpleSelectElementsDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardAsistenteEspejoStandard(){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_ASISTENTE_ESPEJO_STANDARD + "].name"));                                       
        //panel seleccion de elementos
        WizardPanelDescriptor descriptor2 = new JPanelWizardEspejoStandardSelectElementsDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardEspejoStandardSelectElementsDescriptor.IDENTIFIER, descriptor2);               
        //panel configuracion final
        WizardPanelDescriptor descriptor4 = new JPanelWizardEspejoStandardSelectConfigFinishDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardEspejoStandardSelectConfigFinishDescriptor.IDENTIFIER, descriptor4);
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardEspejoStandardSelectElementsDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardAsistenteLibre(){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_ASISTENTE_LIBRE + "].name"));                                       
        //panel seleccion de elementos
        WizardPanelDescriptor descriptor2 = new JPanelWizardLibreSelectElementsDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardLibreSelectElementsDescriptor.IDENTIFIER, descriptor2);               
        //panel configuracion final
        WizardPanelDescriptor descriptor4 = new JPanelWizardLibreSelectConfigFinishDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardLibreSelectConfigFinishDescriptor.IDENTIFIER, descriptor4);
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardLibreSelectElementsDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardClassRepresentacion(){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_CLASS_REPRESENTACION + "].name"));                               
        //panel introduccion: selección del modelo de visualizacion
        WizardPanelDescriptor descriptor1 = new JPanelWizardSelectClassDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardSelectClassDescriptor.IDENTIFIER, descriptor1);
        //panel seleccion de elementos
        WizardPanelDescriptor descriptor2 = new JPanelWizardSelectPropiertiesDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardSelectPropiertiesDescriptor.IDENTIFIER, descriptor2);       
        //panel seleccion de la distribucion de los elementos
        WizardPanelDescriptor descriptor3 = new JPanelWizardSelectOrderRepresentacionDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardSelectOrderRepresentacionDescriptor.IDENTIFIER, descriptor3);
        //panel seleccion de la distribucion de los elementos
        WizardPanelDescriptor descriptor4 = new JPanelWizardSelectModeRepresentacionDescriptor();
        objTempWizard.registerWizardPanel(JPanelWizardSelectModeRepresentacionDescriptor.IDENTIFIER, descriptor4);
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardSelectClassDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    
    private static Wizard configWizardClass(ObjetoTipoDatoReflexion objTipoDato){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_CLASS + "].name"));                               
        
        //panel introduccion: selección del modelo de visualizacion
        WizardPanelDescriptor descriptor1 = new JPanelWizardClaseWelcomeDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseWelcomeDescriptor.IDENTIFIER, descriptor1);
        
        //Paneles de Seleccion
        WizardPanelDescriptor descriptor5 = new JPanelWizardClaseComplejaSeleccionPropiedadesEntradaDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaSeleccionPropiedadesEntradaDescriptor.IDENTIFIER, descriptor5);
        
        WizardPanelDescriptor descriptor2 = new JPanelWizardClaseComplejaSeleccionPropiedadesSalidaDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaSeleccionPropiedadesSalidaDescriptor.IDENTIFIER, descriptor2);
        
        WizardPanelDescriptor descriptor4 = new JPanelWizardClaseComplejaSelectConstructorDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaSelectConstructorDescriptor.IDENTIFIER, descriptor4);       
        
        //Pnalees de Configuracion
        WizardPanelDescriptor descriptor3 = new JPanelWizardClaseComplejaEntradaCustomPropertiesFinishDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaEntradaCustomPropertiesFinishDescriptor.IDENTIFIER, descriptor3);
        
        WizardPanelDescriptor descriptor7 = new JPanelWizardClaseComplejaSalidaCustomPropertiesFinishDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaSalidaCustomPropertiesFinishDescriptor.IDENTIFIER, descriptor7);        
        
        WizardPanelDescriptor descriptor6 = new JPanelWizardClaseComplejaParametrosConstructorFinishDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaParametrosConstructorFinishDescriptor.IDENTIFIER, descriptor6);         
        
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardClaseWelcomeDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardClassSimple(ObjetoTipoDatoReflexion objTipoDato){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_CLASS_SIMPLE + "].name"));                               
        //panel introduccion: selección del modelo de visualizacion
        WizardPanelDescriptor descriptor1 = new JPanelWizardClaseSimpleFinishDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseSimpleFinishDescriptor.IDENTIFIER, descriptor1);        
        
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardClaseSimpleFinishDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardClassVinculadora(ObjetoTipoDatoReflexion objTipoDato){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_GENERADOR_VINCULADOR + "].name"));                               
        //panel introduccion: selección del modelo de visualizacion
        WizardPanelDescriptor descriptor1 = new JPanelWizardClaseVinculadoraFinishDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseVinculadoraFinishDescriptor.IDENTIFIER, descriptor1);        
        
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardClaseSimpleFinishDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
    
    private static Wizard configWizardClassConstructor(ObjetoTipoDatoReflexion objTipoDato){
        Wizard objTempWizard = new Wizard();               
        //titulo
        objTempWizard.getDialog().setTitle((String)UtilWizard.resources.getObject("wizard[" + WIZARD_CLASS_CONSTRUCTOR + "].name"));                               
        //panel introduccion: selección del modelo de visualizacion
        WizardPanelDescriptor descriptor1 = new JPanelWizardClaseWelcomeDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseWelcomeDescriptor.IDENTIFIER, descriptor1);
        
        WizardPanelDescriptor descriptor2 = new JPanelWizardClaseComplejaSelectConstructorDescriptor(objTipoDato);
        objTempWizard.registerWizardPanel(JPanelWizardClaseComplejaSelectConstructorDescriptor.IDENTIFIER, descriptor2);        
        
        //visualizando el panel inicial
        objTempWizard.setCurrentPanel(JPanelWizardClaseWelcomeDescriptor.IDENTIFIER); 
        return objTempWizard;
    }
}
